const express = require('express');
const router = express.Router();

const {
	findUserMessage
} = require("../db/usersdb.js");
const {
	updateEmailResult,
	addEmailToList
} = require("../db/emailsdb.js");
const {
	addToFriendList
} = require("../db/friendsdb.js");

const {
	DataRls,
	Email
} = require("../config/class.js")

const {
	isUserOnline,
	getUser,
	getAllUsers
} = require("../db/onlineUsers.js");


// 查询好友的方法
router.get('/find', async function (req, res, next) {
	//  开始根据请求查找 
	let {
		find
	} = req.query;

	let rls = await findUserMessage(find);

	// 将查询到的结果，返回给前端
	res.json(rls);
});



// 根据邮件消息操作添加好友的方法
// 这里也主要为了防止网络攻击
// 增加好友的方法
router.post('/addFriend', async function (req, res, next) {
	//  开始根据请求查找 
	let {
		emilId, //邮件的id,添加好友的依据
		select, //对该邮件的处理结果
	} = req.body;

	try {
		// 将用户的处理结果,和邮件id传入
		// 返回的是单个邮件的内容
		let rls = [];

		rls.push(await updateEmailResult(req.session.user._id, emilId, select));

		// 通过的id和接收的id
		let UserID = String(req.session.user._id);
		let FriendID = String(rls[0].data.sendID);
		let hintText = "";

		// 根据返回的邮件内容，添加好友
		if (select == "ok") {
			// 同意好友请求，互相添加好友
			// 不允许重复添加
			rls.push(await addToFriendList(UserID, FriendID, rls[0].data.meta.addName));
			rls.push(await addToFriendList(FriendID, UserID, req.session.user.username));

			hintText = `用户${req.session.user.username}同意了你的好友请求`;
		} else {
			hintText = `用户${req.session.user.username}拒绝了你的好友请求`;
		}

		// 添加拒绝或者同意的好友申请
		let hintEmail = new Email({
			room: 'system',
			sendID: UserID,
			receiveID: FriendID,
			message: hintText,
			sendType: "HINT",
			meta:{
				RXname:req.session.user.username,//接收者id
			}
		})

		// 根据选择设置返回的类型
		hintEmail.result = select;

		// 添加邮件提示
		await addEmailToList(FriendID, hintEmail);

		// 如果好友事件中的另一方在线，就发送更新请求
		if (isUserOnline(FriendID)) {
			getUser(FriendID).sokcet.emit("NewFriend");
		}


		// 将查询到的结果，返回给前端
		res.json(new DataRls("邮件处理成功", hintText, true));
	} catch (error) {
		// 如果有报错，则直接抛出报错
		res.json(error);
	}
});


module.exports = router;